/** 
 * <b>Class</b> ServidorUtils
 * <p><b>Description:<b> ...</p>
 * <p><b>Copyright:<b> MiguelMonterrey © 2012</p>
 * <p><b>Enterprise:<b> ULL</p>
 * 
 * <p><b>File name:<b> ServidorUtils.java</p>
 * <p><b>Package name:<b> servidor.utils</p> 
 * <p><b>Project name:<b> ConexionClienteServidor</p>
 * 
 * @version 1.0, 24-oct-2012
 * @author MiguelMonterrey
 */
package servidor.utils;

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import servidor.frame.ServidorFrame;

// TODO: Auto-generated Javadoc
/**
 * The Class ServidorUtils.
 */
public class ServidorUtils implements Runnable {

	/**
	 * Run server.
	 */
	public void run() {
		Socket connection; // para procesar la conexión de un cliente
		OutputStream output; // para enviar datos al cliente a través del Socket connection
		ServerSocket server; // para esperar conexiones
		
		// Se establece el ServerSocket para detectar conexiones de un cliente por
		// el puerto 5000, 100 es el número de conexiones que pueden esperar en una
		// cola para conectarse al servidor
		server = null;
		
		try {
			server = new ServerSocket(5000, 100);
		} catch (IOException e) {
			System.err.println("ERROR: Could not listen on port: 5000.");
			
			System.exit(1);
		}
		
		// Se espera y acepta un nuevo cliente
		connection = null;
			
		// Este método se bloquea hasta que se recibe una conexión				
		try {
			connection = server.accept();
		} catch (IOException e) {
			System.err.println("ERROR: Accept failed.");
		        
			System.exit(1);
		}
		    			
		ServidorFrame.setTextMainArea("Conexi\u00F3n recibida con el Cliente 1");
		    			
		// Cuando se recibe una conexión se asigna a connection un objeto Socket
		// que se usará para manejar la conexión
		try {
			output = connection.getOutputStream();
			
			// Texto que se va a enviar del servidor al cliente
			String s = new String("Hola soy el servidor que te habla!!!\n"); 
			    			
			ServidorFrame.setTextMainArea("Datos enviados");
			    			
			// Se envía carácter a carácter. Cada carácter se transforma a un entero, ya
			// que el método write de OutputStream requiere un entero
			for (int i= 0; i < s.length(); i++) 
				output.write((int)s.charAt(i));
			    			
			ServidorFrame.setTextMainArea("Transmisión cerrada");
			    			
			connection.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
